package dao

import (
	"time"
)

// 这是 LearningMaterial 的全局公开dao对象，被service层调用!
var LearningMaterialDao = learningMaterialDao{}

// 成体系的学习资料
// 这是 learning_material表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type LearningMaterial struct {
	Id        int32     `json:"id" form:"id" db:"id" v:"id"`
	Title     string    `json:"title" form:"title" db:"title" v:"title"`                 // 标题
	Url       string    `json:"url" form:"url" db:"url" v:"url"`                         // 资料url
	Type      int8      `json:"type" form:"type" db:"type" v:"type"`                     // 类型，0-文本；1-视频
	Sort      int16     `json:"sort" form:"sort" db:"sort" v:"sort"`                     // 排序
	FirstUrl  string    `json:"first_url" form:"first_url" db:"first_url" v:"first_url"` // 开始学习的url
	CreatedAt time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`
}

// 注意:这是 LearningMaterial 的私有dao对象，只能在dao层内使用!
type learningMaterialDao struct {
	InsertTemplate func(arg LearningMaterial) (int64, error)                  //插入一条记录
	UpdateTemplate func(arg LearningMaterial) (int64, error)                  //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                              `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (LearningMaterial, error)                   `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg LearningMaterialList) ([]LearningMaterial, error) //模糊分页查询
}

/*
// 这是 learning_material 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type LearningMaterialPostman struct {
id
title
url
type
sort
first_url
created_at

}*/

// 这是 learning_material 表的批量请求参数
type LearningMaterialReq struct {
	List []LearningMaterial `json:"list" form:"list"`
}

// 这是 learningMaterialDao.List()方法的请求参数
type LearningMaterialList struct {
	Page
}
